// 泛型
// 在编译期间不确定变量的类型。在调用时，由开发者定义指定的类型
function identity<T>(arg: T): T {
  return arg
}

let output = identity<string>('myString')
console.log(output)
let output2 = identity<number>(0)
console.log(output2)

// 多个泛型                      这里的K时返回值类型
function identity2<K, V>(x: K, y: V): K {
  return x
}

identity2<string, number>('123', 123)
identity2<string, boolean>('123', true)

// Pick的使用
// Pick就是挑选的意思，可以从已有的类型中，挑选一些类型进行使用
interface Todo {
  title: string
  description: string
  completed: boolean
}
type TodoPreview = Pick<Todo, 'title' | 'completed'>

const todo: TodoPreview = {
  title: 'Clean room',
  completed: false
}